AJAX (Asynchronus Javascript And XML)
    
                - mengambil data dari server secara background
                - update tampilan web tanpa harus relaod browser
                - mengirim data ke server secara background
                - ajax berkomunikasi menggunakan object XMLHttpRequest

                - cara menggunakan AJAX
                    // membuat object AJAX
                        var xhr = new XMLHttpRequest(); // membuat object dalam persiapan HTTP asinkron

                    // menentukan fungsi handler untuk event
                        xhr.onreadystatechange = function () {};
                        xhr.onload = function () {};
                        xhr.onerror = function () {};
                        xhr.onprogress = function () {};

                    // menentukan method dan URL
                        xhr.open("GET", url, true);
                        
                    // mengirim request
                        xhr.send();
            
event handler
                - onloadstart : event ini terjadi ketika permintaan dimulai
                    xhr.onloadstart = function () {
                        console.log("permintaan dimulai");
                    };

                - onload : event ini terjadi ketika permintaan berhasil selesai dan respons dari server telah diterima dengan sukses
                    xhr.onload = function () {
                        if (this.status == 200) {
                            // Respon berhasil diterima
                            var data = xhr.responseText;
                            console.log(data);
                        }
                    };

                - onerror : event ini terjadi jika ada kesalahan selama proses permintaan
                            misal ketika server merenspon dengan kode status yang bukan 200 (OK) / ada kesalahan jaringan
                    xhr.onerror = function () {
                        console.log("terjadi kesalahan");
                    };

                - onloadend : event ini terjadi ketika permintaan selesai, baik berhasil / gagal. event terjadi setelah "onload" / "onerror"
                    xhr.onabort = function () {
                        xhr.abort(); // permintaan yang sedang berlangusung akan diberhentikan secara paksa
                        console.log("permintaan dibatalkan");
                    };
            
event handler 2
                - onreadystatechange : event ini memungkinkan anda untuk menangani perubahan dalam "readyState" objext XHR selama proses permintaan
                    xhr.onreadystatechange = function () {
                        if (this.readyState === XMLHttpRequest.DONE) {
                            if (this.status === 200) {
                                // respons berhasil diterima
                                var data = this.responseText;
                                console.log(data);
                            } else {
                                console.log("terjadi kesalahan" + xhr.status);
                            }
                        }
                    };

                    atau 

                    xhr.onreadystatechange = function() {
                        // readystate 4 artinya done dan status 200 artinya sukses
                        if(this.readyState == 4 && this.status == 200) {
                            document.getElementById("hasil").innerHTML= this.responseText;
                        }
                    };

                - onprogress : terjadi selama pengiriman / penerima data ketika respons atau permintaan masih dalam proses 
                               anda dapat meanampilkan proges / indikator loading
                    xhr.onprogress = function (event) {
                        if (event.lengthComputable) {
                            var percentCompleate = (event.loaded / event.total) * 100;
                            console.log("proges: " + percentCompleate + "%");
                        }
                    };

                - ontimeout : jika anda mengatur waktu maksimal time out untuk permintaan dengan dengan "xhr.timeout"                    
                    xhr.timeout = function () {
                        console.log("waktu permintaan habis")
                    }

                - onabort : jika anda membatalkan permintaan XHR dengan menggunakan xhr.abort()
                    xhr.onabort = function () {
                        xhr.abort(); // permintaan yang sedang berlangusung akan diberhentikan secara paksa
                        console.log("permintaan dibatalkan");
                    };
            
method
    
                // mengirim permintaan http ke server

                // metode open() digunakan untuk menginisialisasi permintaan http
                    xhr.open("GET", url, true);

                    // method : "GET", "POST", "PUT", "DELETE"
                    // url : url tujuan target yang akan diminta
                    // async : nilai bolean yang akan menentukan permintaan akan dilakukan secara asinkron(true) atau sinkron(false)

                // metode send() digunakan untuk mengirim permintaan http ke server setelah permintaan telah diinisialisasi dengan xhr.opem()
                    xhr.send();

                    // parameter data(opsional) adalah data yang akan dikirim ke server. : "POST"
            
contoh fungsi loadContent menggunakan XMLHttpRequest
    
                function loadContent() {
                    var xhr = new XMLHttpRequest();
                    var url = "https://api.github.com/users/ariafatah0711"
                    xhr.onreadystatechange = function() {
                        // readystate 4 artinya done dan status 200 artinya sukses
                        if(this.readyState == 4 && this.status == 200) {
                            document.getElementById("hasil").innerHTML= this.responseText;
                        }
                    };
                    // GET = metode request yang digunakan
                    // url = url tujuan
                    // true mengeksekusi AJAX secara asyncrounus
                    xhr.open("GET", url, true)
                    xhr.send();
                }
            

menampilkan data